home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / J A V A / Java Development Kit V1.2 / jdk12-win32(1).exe / data1.cab / demos / demo / jfc / Metalworks / MetalworksDocumentFrame.java < prev    next >
Encoding:
Java Source  |  1998-12-01  |  4.5 KB  |  169 lines

  1. /*
  2.  * @(#)MetalworksDocumentFrame.java    1.5 98/08/26
  3.  *
  4.  * Copyright 1998 by Sun Microsystems, Inc.,
  5.  * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
  6.  * All rights reserved.
  7.  *
  8.  * This software is the confidential and proprietary information
  9.  * of Sun Microsystems, Inc. ("Confidential Information").  You
  10.  * shall not disclose such Confidential Information and shall use
  11.  * it only in accordance with the terms of the license agreement
  12.  * you entered into with Sun.
  13.  */
  14.  
  15. import java.awt.*;
  16. import java.awt.event.*;
  17. import java.util.*;
  18. import javax.swing.*;
  19. import javax.swing.border.*;
  20.  
  21.  
  22. /**
  23.   * This is a subclass of JInternalFrame which displays documents.
  24.   *
  25.   * @version 1.5 08/26/98
  26.   * @author Steve Wilson
  27.   */
  28. public class MetalworksDocumentFrame extends JInternalFrame {
  29.   
  30.     static int openFrameCount = 0;
  31.     static final int offset = 30;
  32.  
  33.     public MetalworksDocumentFrame() {
  34.     super("", true, true, true, true);
  35.     openFrameCount++;
  36.         setTitle("Untitled Message " + openFrameCount);
  37.  
  38.     JPanel top = new JPanel();
  39.     top.setBorder(new EmptyBorder(10, 10, 10, 10));
  40.     top.setLayout(new BorderLayout());
  41.     top.add(buildAddressPanel(), BorderLayout.NORTH);
  42.  
  43.     JTextArea content = new JTextArea( 15, 30 );
  44.     content.setBorder( new EmptyBorder(0,5 ,0, 5) );
  45.     content.setLineWrap(true);
  46.  
  47.  
  48.  
  49.     JScrollPane textScroller = new JScrollPane(content, 
  50.                            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
  51.                            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
  52.     top.add( textScroller, BorderLayout.CENTER);
  53.     
  54.  
  55.     setContentPane(top);
  56.     pack();
  57.     setLocation( offset * openFrameCount, offset *openFrameCount);
  58.  
  59.     }
  60.  
  61.     private JPanel buildAddressPanel() {
  62.         JPanel p = new JPanel();
  63.     p.setLayout( new LabeledPairLayout() );
  64.     
  65.  
  66.     JLabel toLabel = new JLabel("To: ", JLabel.RIGHT);
  67.     JTextField toField = new JTextField(25);
  68.     p.add(toLabel, "label");
  69.     p.add(toField, "field");
  70.  
  71.  
  72.     JLabel subLabel = new JLabel("Subj: ", JLabel.RIGHT);
  73.     JTextField subField = new JTextField(25);
  74.     p.add(subLabel, "label");
  75.     p.add(subField, "field");
  76.  
  77.  
  78.     JLabel ccLabel = new JLabel("cc: ", JLabel.RIGHT);
  79.     JTextField ccField = new JTextField(25);
  80.     p.add(ccLabel, "label");
  81.     p.add(ccField, "field");
  82.  
  83.     return p;
  84.  
  85.     }
  86.  
  87.     class LabeledPairLayout implements LayoutManager {
  88.  
  89.       Vector labels = new Vector();
  90.       Vector fields = new Vector();
  91.       
  92.       int yGap = 2;
  93.       int xGap = 2;
  94.  
  95.       public void addLayoutComponent(String s, Component c) {
  96.       if (s.equals("label")) {
  97.           labels.addElement(c);
  98.       }  else {
  99.           fields.addElement(c);
  100.       }
  101.       }
  102.  
  103.       public void layoutContainer(Container c) {
  104.       Insets insets = c.getInsets();
  105.       
  106.       int labelWidth = 0;
  107.       Enumeration labelIter = labels.elements();
  108.       while(labelIter.hasMoreElements()) {
  109.           JComponent comp = (JComponent)labelIter.nextElement();
  110.           labelWidth = Math.max( labelWidth, comp.getPreferredSize().width );
  111.       }
  112.  
  113.       int yPos = insets.top;
  114.  
  115.       Enumeration fieldIter = fields.elements();
  116.       labelIter = labels.elements();
  117.       while(labelIter.hasMoreElements() && fieldIter.hasMoreElements()) {
  118.           JComponent label = (JComponent)labelIter.nextElement();
  119.           JComponent field = (JComponent)fieldIter.nextElement();
  120.           int height = Math.max(label.getPreferredSize().height, field.getPreferredSize().height);
  121.           label.setBounds( insets.left, yPos, labelWidth, height ); 
  122.           field.setBounds( insets.left + labelWidth + xGap, 
  123.                  yPos, 
  124.                  c.getSize().width - (labelWidth +xGap + insets.left + insets.right), 
  125.                  height ); 
  126.           yPos += (height + yGap);
  127.       }
  128.       
  129.       }
  130.  
  131.  
  132.       public Dimension minimumLayoutSize(Container c) {
  133.       Insets insets = c.getInsets();
  134.       
  135.       int labelWidth = 0;
  136.       Enumeration labelIter = labels.elements();
  137.       while(labelIter.hasMoreElements()) {
  138.           JComponent comp = (JComponent)labelIter.nextElement();
  139.           labelWidth = Math.max( labelWidth, comp.getPreferredSize().width );
  140.       }
  141.  
  142.       int yPos = insets.top;
  143.  
  144.       labelIter = labels.elements();
  145.       Enumeration fieldIter = fields.elements();
  146.       while(labelIter.hasMoreElements() && fieldIter.hasMoreElements()) {
  147.           JComponent label = (JComponent)labelIter.nextElement();
  148.           JComponent field = (JComponent)fieldIter.nextElement();
  149.           int height = Math.max(label.getPreferredSize().height, field.getPreferredSize().height);
  150.           yPos += (height + yGap);
  151.       }
  152.       return new Dimension( labelWidth * 3 , yPos );
  153.       }
  154.   
  155.       public Dimension preferredLayoutSize(Container c) {
  156.       Dimension d = minimumLayoutSize(c);
  157.       d.width *= 2;
  158.           return d;
  159.       }
  160.    
  161.       public void removeLayoutComponent(Component c) {}
  162.  
  163. }
  164.  
  165.  
  166. }
  167.  
  168.  
  169.